package com.tao.xitong.security;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
/**
 * SecurityBeanConfig 类用于配置安全相关的 Bean
 */
public class SecurityBeanConfig {

    /**
     * 配置密码编码器
     * 使用 BCrypt 算法对密码进行加密，确保存储和传输过程中的安全性
     *
     * @return 返回一个 BCrypt 算法的 PasswordEncoder 实例
     */
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    /**
     * 配置认证管理器
     * 通过 AuthenticationConfiguration 获取认证管理器实例，用于处理用户认证逻辑
     *
     * @param authenticationConfiguration 认证配置对象，用于获取认证管理器
     * @return 返回配置好的 AuthenticationManager 实例
     * @throws Exception 如果无法正确配置认证管理器，将抛出异常
     */
    @Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
        return authenticationConfiguration.getAuthenticationManager();
    }
}
